clear all

path(path,'FonctionsFormes');
path(path,'Dirichlet');
path(path,'Erdc');
path(path,'FluxFree');
path(path,'PostProcess');
path(path,'ZZ');
path(path,'Globale');
path(path,'Remaillage');
path(path,'Solve');
path(path,'ErreurLocale');


clear all
clc

% Données géométriques
%%%%%%%%%%%%%%%%%%%%%%

% Longueur (en m)
donnees.poutre.L = 10 ;

% Propriétés de la poutre
donnees.poutre.E = 210e9 ;
donnees.poutre.I = 0.0012 ;

% Données problème
%%%%%%%%%%%%%%%%%%%

% Type de chargement
donnees.chargement='ponctuelETreparti'; % 'ponctuel' ou 'reparti' ou 'ponctuelETreparti'

% Force (en N)
donnees.F = 500;

% Force linéique de la forme ax² + bx + c
donnees.forceLineiqueA = 5 ;
donnees.forceLineiqueB = 20 ;
donnees.forceLineiqueC = 10 ;

% Interpolation avec fonctions de forme:
donnees.nInt = 100; 

% Nombre d'éléments initial
donnees.nElemIni = 6 ;
donnees.nombreElements = donnees.nElemIni ;

% Nombre de subdivision d'un élément pour la resolution par patchs
donnees.subdivisionPatch = 2 ;

% Discretisation de la solution analytique
donnees.discretisationAnal = 100;

% Calcul d'erreur locale : quantité d'intérêt=moyenne du moment entre deux
% noeuds : n1 et n2

donnees.erreurLocaleMoyenneMoment.n1 = 1;
donnees.erreurLocaleMoyenneMoment.n2 = donnees.nombreElements/2;






donnees.maillage = Mailleur_uniforme(donnees) ;
maillage = donnees.maillage ;

% Création de la matrice de rigidité de de la matrice de contrainte (prise
% en compte des CL par lagrangien
K = AssemblageRigidite(maillage,donnees.poutre) ;

C = [1,zeros(1,2*length(maillage)-1);
    0,1,zeros(1,2*length(maillage)-2)];

Klag = [K ,C';C,[0,0;0,0]];

force = [zeros(2*(length(maillage)-1),1);donnees.F;0] ;
force = force + second_membre_lineique(donnees,maillage) ;

forceLag = [force;0;0];

U = Klag\forceLag ;
donnees.res.Uh = U(1:length(U)-2) ;
%Usubs = Ksubs\forceSubs ;

% plot(donnees.res.Uh);

%derivSecUhL(donnees) 
%fleche = U(length(U)-3)

% plot(Moment_poutre(donnees));
% pause;

[donnees.UhInt,donnees.maillageInt] = Fonction_interpolee(donnees);

Uanal = resultatAnalytique(donnees);
% flecheAnal = Uanal(length(Uanal))


%donnees.res.Uh=Solveur(donnees,'ponctuel','direct');
% donnees.res.Uh

 [erreur, carteErreur] = ERdC(donnees);
% [err, caca]=Erreur(donnees,'RdC');

[errZZ, errZZelem]=EZZ(donnees);
%Erreur_locale(donnees,'fleche','dirichlet');











% Remaillage d'un problème local
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% 
% [erreurLocaleFleche,carteRemaillage] = Erreur_locale(donnees,'fleche','dirichlet');
% 
% % size(carteRemaillage)
% % size(maillage)
% pause;
% 
% [nouveauMaillage,tailleNouveauMaillage]=Remaillage(maillage,1e-9,carteRemaillage);
% 
% 
% 
% donnees.maillage=nouveauMaillage;
% donnees.nombreElements=tailleNouveauMaillage-1;
% 
% [erreurLocaleFleche2,carteRemaillage] = Erreur_locale(donnees,'fleche','dirichlet');
% 
% erreurLocaleFleche
% erreurLocaleFleche2
% 
% 
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%










% Remaillage d'un problème global
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[Uh,donneesBis]=Solveur(donnees,donnees.chargement,'direct');
1
pause;
donnees.res.Uh=Uh;
2
pause;
[erreur, carteErreur]=Erreur(donnees,'dirichlet');
3
pause;
[nouveauMaillage,tailleNouveauMaillage]=Remaillage(donnees.maillage,erreur/10,carteErreur);
4
pause;
donnees.maillage=nouveauMaillage;
5
pause;
donnees.nombreElements=tailleNouveauMaillage-1;
6
pause;
[Uh2,donneesBis]=Solveur(donnees,donnees.chargement,'direct');
donnees.res.Uh=Uh2;
7
pause;
[erreur2, carteErreur2]=Erreur(donnees,'dirichlet');
8
pause;

erreur
erreur2
carteErreur2

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%




% erreur

plotErreur(donnees.maillage,donnees.res.Uh,errZZelem,'ZZ sur configuration deformee') ;
plotErreur(donnees.maillage,donnees.res.Uh,carteErreur,'erreur exacte sur configuration deformee');
plotErreur(donnees.maillage,donnees.res.Uh,errDirelem,'dirichlet sur configuration deformee');
%plotErreur(donnees.maillage,donnees.res.Uh,[1:50])
%plot(1:donnees.nombreElements, errRdCelem)
%hold on ;
%plot(0: donnees.poutre.L/(donnees.discretisationAnal) :donnees.poutre.L ,Uanal,'-r')


